Plugins/Community Based Plugins/Microsoft Defender XDR Custom Plugin Scenarios/RareProcess/RareProcessAsAService.yaml (154 lines of code) (raw):

Descriptor: Name: RareProcessesInvestigation DisplayName: Rare Processes Launched as a Service Description: Identify rare processes launched as a service on a device. SkillGroups: - Format: KQL Skills: - Name: GetRareProcessDetails DisplayName: Get Rare Process Details Description: This query looks for rarely seen processes that are launched as a service. Inputs: - Name: Device_Name Description: Name of the device to investigate. Required: True ExamplePrompt: - "Show me rare processes as a service running on the device." - "Show me a list of devices with rare processes as a service." - "Which rare processes are running as a service on the device?" - "Why are these processes considered rare?" - "What folder path was used by the initiating processes on this device?" - "What is the SHA1 hash for the initiating process?" - "What is the SHA256 hash for the initiating process?" - "What is the most common rare process executed?" Settings: Target: Defender Template: |- let LookupTime = 7d; let WhiteList = datatable(WhiteListedProcesses: string) [ "svchost.exe", "mssense.exe", "msmpeng.exe", "searchindexer.exe", "microsoftedgeupdate.exe" ]; let GetServices = DeviceProcessEvents | where TimeGenerated > ago(LookupTime) | where InitiatingProcessParentFileName contains "services.exe" | where InitiatingProcessFileName !in (WhiteList) | project TimeGenerated, DeviceName, StartedChildProcess = FileName, StartedChildProcessSHA1 = SHA1, StartedChildProcessCmdline = ProcessCommandLine, ServiceProcessSHA1 = InitiatingProcessSHA1, ServiceProcess = InitiatingProcessFileName, ServiceProcessCmdline = InitiatingProcessCommandLine, ServiceProcessID = InitiatingProcessId, ServiceProcessCreationTime = InitiatingProcessCreationTime, ServiceProcessUser = InitiatingProcessAccountName; GetServices | summarize count() by ServiceProcess, DeviceName | where count_ < 6 | join kind=inner (GetServices) on ServiceProcess, DeviceName | join kind=leftouter ( DeviceNetworkEvents | where TimeGenerated > ago(LookupTime) | where InitiatingProcessParentFileName contains "services.exe" | where InitiatingProcessFileName !in (WhiteList) | project TimeGenerated, DeviceName, ServiceProcessSHA1 = InitiatingProcessSHA1, ServiceProcess = InitiatingProcessFileName, ServiceProcessCmdline = InitiatingProcessCommandLine, ServiceProcessID = InitiatingProcessId, ServiceProcessCreationTime = InitiatingProcessCreationTime, ServiceProcessUser = InitiatingProcessAccountName, NetworkAction = ActionType, RemoteIP, RemoteUrl ) on DeviceName, ServiceProcess, ServiceProcessCmdline, ServiceProcessCreationTime, ServiceProcessID, ServiceProcessUser, ServiceProcessSHA1 | join kind=leftouter ( DeviceFileEvents | where TimeGenerated > ago(LookupTime) | where InitiatingProcessParentFileName contains "services.exe" | where InitiatingProcessFileName !in (WhiteList) | project TimeGenerated, DeviceName, ServiceProcessSHA1 = InitiatingProcessSHA1, ServiceProcess = InitiatingProcessFileName, ServiceProcessCmdline = InitiatingProcessCommandLine, ServiceProcessID = InitiatingProcessId, ServiceProcessCreationTime = InitiatingProcessCreationTime, ServiceProcessUser = InitiatingProcessAccountName, FileAction = ActionType, ModifiedFile = FileName, ModifiedFileSHA1 = SHA1, ModifiedFilePath = FolderPath ) on DeviceName, ServiceProcess, ServiceProcessCmdline, ServiceProcessCreationTime, ServiceProcessID, ServiceProcessUser, ServiceProcessSHA1 | join kind=leftouter ( DeviceImageLoadEvents | where TimeGenerated > ago(LookupTime) | where InitiatingProcessParentFileName contains "services.exe" | where InitiatingProcessFileName !in (WhiteList) | project TimeGenerated, DeviceName, ServiceProcessSHA1 = InitiatingProcessSHA1, ServiceProcess = InitiatingProcessFileName, ServiceProcessCmdline = InitiatingProcessCommandLine, ServiceProcessID = InitiatingProcessId, ServiceProcessCreationTime = InitiatingProcessCreationTime, ServiceProcessUser = InitiatingProcessAccountName, LoadedDLL = FileName, LoadedDLLSHA1 = SHA1, LoadedDLLPath = FolderPath ) on DeviceName, ServiceProcess, ServiceProcessCmdline, ServiceProcessCreationTime, ServiceProcessID, ServiceProcessUser, ServiceProcessSHA1 | summarize ConnectedAddresses = make_set(RemoteIP, 100000), ConnectedUrls = make_set(RemoteUrl, 100000), FilesModified = make_set(ModifiedFile, 100000), FileModFolderPath = make_set(ModifiedFilePath, 100000), FileModHA1s = make_set(ModifiedFileSHA1, 100000), ChildProcesses = make_set(StartedChildProcess, 100000), ChildCommandlines = make_set(StartedChildProcessCmdline, 100000), DLLsLoaded = make_set(LoadedDLL, 100000), DLLSHA1 = make_set(LoadedDLLSHA1, 100000) by DeviceName, ServiceProcess, ServiceProcessCmdline, ServiceProcessCreationTime, ServiceProcessID, ServiceProcessUser, ServiceProcessSHA1 | where DeviceName == "{{Device_Name}}"